Boucle pour copier certaines valeurs d'une ligne
Résolu
bassmart
Messages postés
281
Date d'inscription
Statut
Membre
Dernière intervention
-
bassmart Messages postés 281 Date d'inscription Statut Membre Dernière intervention -
bassmart Messages postés 281 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai créer une macro pour copier les valeurs de la première ligne d'un tableau de la colonne A à C, jusqu'à la prochaine cellule non vide qui correspond à une nouvelle valeur.
Dans mon tableau, dans les 3 premières colonnes se retrouve mes info principales : NO_SITE, NO_SONDAGE et NO_PIÉZO. Cette info, se retrouve seulement sur la première ligne de chacun des NO_SONDAGE différent, ensuite dans les autres colonnes se retrouve la date des lectures (colonne D)et les lectures (colonne E).
Donc en gros, je me sert de la colonne D pour savoir jusqu'à qu'elle ligne je doit copier la première ligne (colonne A à C) de chacun des NO_SONDAGE différents. Le nombre de NO_SONDAGE différents dans une feuille est différent d'un fichier à l'autre.
J'ai réussi en partie à réaliser que je veux mais seulement pour 2 NO_SONDAGE différents (module1). J'imagine qu'il y a un autre moyen d'y parvenir! J'ai essayer avec une fonction "For" sans trop de succès (module2)!
Je demande donc votre aide!
Merci!
Voici mon code:
et voici mon fichier: https://www.cjoint.com/c/FCenwY0c2ko
J'ai créer une macro pour copier les valeurs de la première ligne d'un tableau de la colonne A à C, jusqu'à la prochaine cellule non vide qui correspond à une nouvelle valeur.
Dans mon tableau, dans les 3 premières colonnes se retrouve mes info principales : NO_SITE, NO_SONDAGE et NO_PIÉZO. Cette info, se retrouve seulement sur la première ligne de chacun des NO_SONDAGE différent, ensuite dans les autres colonnes se retrouve la date des lectures (colonne D)et les lectures (colonne E).
Donc en gros, je me sert de la colonne D pour savoir jusqu'à qu'elle ligne je doit copier la première ligne (colonne A à C) de chacun des NO_SONDAGE différents. Le nombre de NO_SONDAGE différents dans une feuille est différent d'un fichier à l'autre.
J'ai réussi en partie à réaliser que je veux mais seulement pour 2 NO_SONDAGE différents (module1). J'imagine qu'il y a un autre moyen d'y parvenir! J'ai essayer avec une fonction "For" sans trop de succès (module2)!
Je demande donc votre aide!
Merci!
Voici mon code:
Option Explicit
Sub copie()
Dim lig As Variant
Dim cell As Variant
Dim row As Variant
ActiveSheet.Unprotect
lig = 2
For Each row In Range("D2" & ":D" & lig).Rows
Do While Not IsEmpty(Range("A" & lig))
lig = lig + 1
Range("A" & lig - 1 & ":c" & lig - 1).Copy
If Range("D" & lig) > 0 Then
Range("A" & lig).PasteSpecial Paste:=xlPasteValues
ElseIf Range("D" & lig) = "" Then
MsgBox "Cette ligne est vide: " & lig
Range("D" & lig).End(xlDown).Select
cell = ActiveCell.row
Do While Not IsEmpty(Range("A" & cell))
cell = cell + 1
Range("A" & cell - 1 & ":c" & cell - 1).Copy
If Range("D" & cell) > 0 Then
Range("A" & cell).PasteSpecial Paste:=xlPasteValues
ElseIf Range("D" & cell) = "" Then
MsgBox "Cette ligne est vide: " & cell
Range("D" & cell).End(xlDown).Select
End If
Loop
End If
Loop
Next
ActiveSheet.Protect
End Sub
et voici mon fichier: https://www.cjoint.com/c/FCenwY0c2ko
A voir également:
- Boucle pour copier certaines valeurs d'une ligne
- Comment copier une vidéo youtube - Guide
- Partager photos en ligne - Guide
- Mètre en ligne - Guide
- Super copier - Télécharger - Gestion de fichiers
- Formulaire en ligne de meta - Guide
1 réponse
Voici un autre code que j'ai essayé. Je voudrais qu'à la fin de la comparaison, il revienne à la fonction copy pour effectuer l"opération avec la nouvelle valeur de la Ligne. J'imagine qu'il faut que je change les variables, mais je suis peu perdue là!
Je continue mes recherches!
Option Explicit
Sub copie()
Dim NoCol As Integer
Dim NoLig As Variant
Dim var As Variant
Dim lig As Integer
Dim Ligne As Integer
ActiveSheet.Unprotect
NoCol = 4
lig = 2
For NoLig = 2 To Split(ActiveSheet.UsedRange.Address, "$")(4)
var = ActiveSheet.Cells(NoLig, NoCol)
While Not IsEmpty(Range("D" & lig))
lig = lig + 1
Range("A" & NoLig & ":C" & NoLig).Copy
If Range("D" & lig) > 0 Then
Range("A" & lig).PasteSpecial Paste:=xlPasteValues
ElseIf Range("D" & lig) = "" Then
MsgBox "Cette ligne est vide: " & lig
Range("D" & lig).End(xlDown).Offset(0, -1).Select
Ligne = ActiveCell.row
If Range("C" & Ligne).Value <> Range("C2") Then
MsgBox "Le numéro de la ligne: " & Ligne
End If
End If
Wend
Next
ActiveSheet.Protect
End Sub
Je continue mes recherches!
au plus simple:
https://www.cjoint.com/c/FCerNh0gHif
Merci beaucoup pour le coup de main, c'est assez simple mais il fallait y penser! C'est la première fois que je vois cette fonction Tinfos.
J'ai essayer d'intégrer cette nouvelle macro à celle-ci, qui se lance à partir d'un userform, mais ça ne marche plus!!
Private Sub CommandButton1_Click() Dim nombre As Integer Dim Motdepasse As String Application.Dialogs(xlDialogOpen).Show Motdepasse = InputBox("Entrer le mot de passe :", "Oter la protection de toutes les feuilles", "") nombre = ActiveWorkbook.Sheets.Count Application.ScreenUpdating = False For i = 2 To nombre Worksheets(i).Unprotect Password:=Motdepasse Next i Application.ScreenUpdating = False For x = 2 To Sheets.Count - 1 With Sheets(x) Sheets(x).Select Columns("E:O").Select Selection.EntireColumn.Hidden = False Sheets(x).Range("A2").Select End With Next x With Sheets(x) .Unprotect derlig = .Range("F" & Rows.Count).End(xlUp).row For N = 2 To derlig If .Range("D" & N) <> "" Then If .Range("A" & N) <> "" Then TInfos = .Range("A" & N & ":C" & N) Else .Range("A" & N & ":C" & N) = TInfos End If End If Next N .Protect End With Motdepasse = InputBox("Entrer le mot de passe :", "Mettre la protection sur toutes les feuilles", "") nombre = ActiveWorkbook.Sheets.Count Application.ScreenUpdating = False For i = 2 To nombre Worksheets(i).Protect Password:=Motdepasse Next i UserForm1.Hide Application.Dialogs(xlDialogSaveAs).Show ThisWorkbook.Saved = True 'Application.Quit End SubMerci!
TInfos est une variable tableau pas une fonction.
Qu'est ce qui ne marche plus ??
Faudrait peut-etre mettre le code de copie ligne(s) dans la boucle des onglets!!!!!!!
Il ne copie que la première valeur de NO_SONDAGE de la première feuille.
J'ai déplacé le code de copie ligne(s) dans la boucle des onglets et c'est la même chose. J'ai aussi essayé d'appeler la macro Copie_2 dans la boucle des onglets et ça ne fonctionne pas non plus!