Annonces
La communauté Autodesk sera en lecture seule du 26 avril au 27 avril, le temps de réaliser une maintenance essentielle. Nous retirerons cette bannière une fois l’opération terminée. Merci pour votre compréhension.

Supprimer une ligne quand cellule vide

mferrandJER26
Participant

Supprimer une ligne quand cellule vide

mferrandJER26
Participant
Participant

Bonjour la communauté,

 

Le contexte est le suivant :

j'ai créé une Custom Table à 2 colonnes et 12 lignes. 

 

Le problème :

Je n'arrive pas a supprimer seulement les lignes ou j'ai une cellule vide, mais si j'ai une cellule vide toutes mes lignes se suppriment.

 

Ci-dessous, un extrait du programme. Extrait qui supprime toutes mes lignes et non pas seulement celles qui sont vides.

 

Je pense que la ligne de code "oRow.Delete" supprime toutes mes lignes et non pas celles que je veux.

 

Comment faire pour lui préciser la ligne que je veux supprimer ?

 

J'ai déjà fait le tour des forums aucunes réponses ne correspondent à mon problème.

 

Merci d'avance pour votre aide.

Dim oRow As Row
For Each oRow In oCustomTable.Rows
	For z = 0 To 22 Step 2
		If oContents(z) = "" Then
			oRow.Delete	
		ElseIf oContents(z) = "ok"	
		End If
	Next
Next

 

0 J'aime
Répondre
Solutions acceptées (1)
786 Visites
6 Réponses
Replies (6)

ThomasB44
Mentor
Mentor
Solution acceptée

Salut @mferrandJER26 

Le problème c'est que tu effaces une ligne dans la boucle For Next, mais la boucle est commencée, et le nombre de lignes à changé. Mais le programme lui, croit toujours qu'il y en a autant. Donc le code produit une erreur à la fin.

Après effacement d'une ligne il faut sortir de la boucle et rentrer à nouveau.

La j'ai créé une table sans changer les en-têtes de colonne, si la cellule est égale à 1, j'efface la ligne

 

' Set a reference to the drawing document.
Dim oDrawDoc As DrawingDocument
oDrawDoc = ThisApplication.ActiveDocument
    
'Define the drawing sheet
Dim oSheet As Sheet
oSheet  = oDrawDoc.Sheets.Item(1)

'Iterate through the contents of the table.
Dim i As Long
Dim oCustomTable As CustomTable
oCustomTable = oSheet.CustomTables.Item(1)

'look at each row
Dim oRowCount As Long

Start :
oRowCount = oCustomTable.Rows.Count
For i = 1 To oRowCount
	oRow = oCustomTable.Rows.Item(i)
	oContent = oRow.Item("Colonne 1")
	If oContent.Value = "1" Then 
		oRow.Delete
		GoTo Start
	End If
Next

 Voilà, je pense que c'était ça le problème.


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

ThomasB44
Mentor
Mentor

Et n'ayant pas le reste de ton code, je n'ai pas compris ce qu'était ton oContent(z) :

If oContents(z) = "" Then
	oRow.Delete	
	ElseIf oContents(z) = "ok"	
End If 

 😉


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime

mferrandJER26
Participant
Participant

Merci pour ta réponse @ThomasB44.

 

Mon "oContents" représente en fait les cellules de mon tableau. 

 

Un exemple :

oContents(0) est la cellule de la première colonne / première ligne. 

oContents(1) est la cellule de la deuxième colonne / première ligne. 

oContents(2) est la cellule de la première colonne / deuxième ligne. 

etc...

 

Ainsi les chiffres paires oContents(0), oContents(2), etc... appartiennent à la première colonne et les impaires   oContents(1), oContents(3), etc... à la deuxième colonne.

 

Donc avec oContents(z), je fais varier mon z entre 0 et 22 en pas de 2 comme ca je vérifie seulement les valeurs de ma première colonne. 

 

0 J'aime

ThomasB44
Mentor
Mentor

Salut @mferrandJER26 

Moi pas comprendre...

Ta boucle For each oRow permet déjà d'itérer entre chaque ligne. Si tu souhaites itérer sur les colonnes en plus, il faut ajouter une 2ème boucle.

De plus, il faut lire le contenu de la cellule à l'intérieur de la boucle, comme je l'ai fait. Tu n'as pas besoin de ton oContents(z) pour lire le contenu des cellules. 🤔


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime

mferrandJER26
Participant
Participant

Je viens d'essayer ce que tu as codé et ca marche parfaitement, effectivement je me suis compliqué la vie a rien ! 

 

Je te remercie en tout cas @ThomasB44 😉

patrick.emin
Alumni
Alumni

Bonjour @mferrandJER26 

Si une des réponses résout votre problème ou vous a permis de mieux le comprendre, voulez vous avoir l'amabilité de cliquer sur le bouton "Approuver la solution" en bas de la réponse qui apporte une solution?
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.


Patrick Emin animateur de la communauté francophone


Vous avez trouvé un message utile? Alors donnez un "J'aime" à ce message!
Votre question a eu une réponse satisfaisante? Voulez vous avoir l'amabilité de cliquer sur le bouton
 APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Signez notre Livre d'Or