J'ai une macro qui trouve les valeurs présente dans la colonne C à partir de la ligne 5 et copie tous les numéro trouvés sur une autre feuille selon le type qui est déterminé avec la colonne 4 .
Tout ce passe bien si mes valeurs sont continue, mais dès qu'il y a une cellule vide, la macro arrête de compter le nombre de ligne même si j'ai d'autres valeurs après.
Est-ce possible de trouver toutes les valeurs de ma colonne C même si elles ne sont pas continue?
Je pense qu le problème vient de ma ligne qui détermine la "plage"!
Voici mon code:
Sub CopieFeuillets()
' Macro de Copie & de Tri
Dim f As Worksheet
Application.EnableEvents = False
Application.ScreenUpdating = False
For Each f In ActiveWorkbook.Worksheets
f.Unprotect
Next
With Sheets("Coordonnées")
For i = 1 To 5
On Error Resume Next
Erase critères
On Error GoTo 0
Select Case i
Case 1
wsn = "FORAGE"
critères = Array("F", "FC", "FS", "FSZ", "FCR")
Col = "A" ' colonne dans laquelle mettre le n° de sondage, est également la colonne pour le tri
PL = 8 'première ligne des données dans wsn
tabtri = "A" & PL & ":N" ' tableau à trier
Case 2
wsn = "CPTU"
critères = Array("C", "CR", "FC", "M")
Col = "A"
PL = 7
tabtri = "A" & PL & ":O"
Case 3
wsn = "Piézomètres"
critères = Array("Z", "FSZ", "FZ")
Col = "B"
PL = 8
tabtri = "A" & PL & ":M"
Case 4
wsn = "Inclinomètres"
critères = Array("I")
'critères = "I"
Col = "B"
PL = 7
tabtri = "A" & PL & ":H"
Case 5
wsn = "Tromino"
critères = Array("V")
Col = "B"
PL = 8
tabtri = "A" & PL & ":J"
End Select
'---------- modif 09/05/2015 --------------
'filtre critere
.Range("$A$4:$N$64").AutoFilter Field:=4, Criteria1:=critères, Operator:=xlFilterValues 'on filtre les données de coordonnées
'mise en memoire plage
Set plage = .Range(.Range("C5"), .Range("C5").End(xlDown)).SpecialCells(xlVisible)
'si critere n'existe pas: NbCel=1048512----> max ligne excel2007 a 2013
NbCel = plage.Count
If NbCel < MaxLigInfos Then 'test si moins de ligne que const MaxLigInfos
Set ws = Sheets(wsn) ' ws = référence de la feuille
nl = ws.Cells(Rows.Count, Col).End(xlUp).Row ' nl pointeur de dernière ligne utilisée dans la feuille basé sur colonne col
If nl <= PL Then nl = PL + 1
For Each r In plage ' on parcourt toutes les cellules sélectionnées de la colonne C, (r=cellule en cours)
Set re = ws.Range(Col & ":" & Col).Find(r.Value, lookat:=xlWhole) 'on recherche le n°de sondage dans la colonne col
If re Is Nothing Then 'si non trouvé
'ajoute une nouvelle ligne avant derniere ligne
ws.Rows(nl).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'derniere ligne + 1
ws.Cells(nl, Col) = ws.Cells(nl - 1, Col)
ws.Cells(nl - 1, Col) = r.Value ' on met le numéro de sondage en colonne col
End If
Next r
With ws.Range(tabtri & nl)
.Sort key1:=.Cells(1, Col), order1:=xlAscending, Header:=xlNo
End With
Else
xx = UBound(critères)
Crit = "<"
For x = 0 To xx
Crit = Crit & critères(x) & ";"
Next x
'Crit = Crit & ">"
'MsgBox "Aucun sondages " & Crit & " trouvés & copiés !!!!!!", vbInformation
End If
Next i
If Worksheets("Coordonnées").AutoFilterMode Then
Worksheets("Coordonnées").AutoFilterMode = False
End If
End With
For Each f In ActiveWorkbook.Worksheets
f.Protect , AllowFormattingCells:=True, AllowFormattingRows:=True
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Merci pour votre aide!
A voir également:
Comment trouver toutes les valeur d'une colonne non continue
Effectivement c'est un range, mais moi dans mon tableau, j'ai des cellules vides au travers des cellules avec des valeurs. Donc, avec votre méthode, il arrête à la première cellule vide de la colonne, comme cette ligne de code
Set plage = .Range(.Range("C5"), .Range("C5").End(xlDown)).SpecialCells(xlVisible)
Alors, je veux trouver la dernière ligne avec une valeur en ne tenant pas compte des cellules vides.
Il faudra attendre qu'un autre jette un oeil.
et ça marche avec mon tableau de test
Effectivement c'est un range, mais moi dans mon tableau, j'ai des cellules vides au travers des cellules avec des valeurs. Donc, avec votre méthode, il arrête à la première cellule vide de la colonne, comme cette ligne de code
Alors, je veux trouver la dernière ligne avec une valeur en ne tenant pas compte des cellules vides.
Merci!
Bonjour bassmart, cela t'aidera peut-être :
Cordialement. 😊