Comment trouver toutes les valeur d'une colonne non continue
bassmart
Messages postés
281
Date d'inscription
Statut
Membre
Dernière intervention
-
Kalissi Messages postés 221 Statut Membre -
Kalissi Messages postés 221 Statut Membre -
Bonjour,
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:
Merci pour votre aide!
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!
2 réponses
-
Bonsoir
peut être y a t il ce qu'il te faut là
https://www.developpez.net/forums/d450923/logiciels/microsoft-office/excel/contribuez/derniere-ligne-derniere-colonne-renseignees-d-feuille/
-
Merci beaucoup pour le lien Whismeril, mais je ne réussi pas à le mettre au bon endroit dans mon code.
J'ai essayé avec la fonction CurrentRegion sur la ligne:Set plage = .Range(.Range("C5"), .Range("C5").CurrentRegion.End(xlDown)).SpecialCells(xlVisible), mais j'ai un petit problème, il prend aussi la première valeur de la colonne "A".
D'où vient se problème?
Merci! -
-
-
-
Bonjour,
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 codeSet 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.
Merci!
-
-
Bonjour,
Un truc peut-être ...
Placer un colonne contenant une valeur continue, qui pourrait être
masquer de démasquer au moment de définir la sélection à parcourir.
Ce peut être n'importe quoi comme valeur [ A ] [ 1 ] ...
C'est ce que je fais toujours...
K