Regroupement de données dans une feuille
Bonjour,
Je joins un .doc pour être plus précis sur ma demande mais en gros je voudrai que dans un endroit précis dans une feuille se répercutent les valeurs saisies dans 3 zones de cette même feuille. Opération qui me permettrait de pouvoir faire un tri correctement.
Je joins un code (ci-dessous) mais il ne fonctionne pas car j'ai la ligne
With Wb.Sheets("ConstatsISO9001")
qui est en jaune.
Merci pour votre aide.
Code complet :
Private Sub CommandButton1_Click() 'en cours de réalisation'
Dim Wb As Workbook
With Wb.Sheets("ConstatsISO9001")
For k = 12 To .[A65536].End(3).Row
If .Range("G" & k) <> "" Then
Range(AO501).Value = .Range("B" & k).Value
Range(AP501).Value = .Range("C" & k).Value
Range(AQ501).Value = .Range("D" & k).Value
Range(AR501).Value = .Range("E" & k).Value
Range(AS501).Value = .Range("F" & k).Value
Range(AT501).Value = .Range("G" & k).Value
End If
Next
End With
With Wb.Sheets("ConstatsISO9001")
For k = 12 To .[A65536].End(3).Row
If .Range("M" & k) <> "" Then
Range(AO501).Value = .Range("B" & k).Value
Range(AP501).Value = .Range("I" & k).Value
Range(AQ501).Value = .Range("J" & k).Value
Range(AR501).Value = .Range("K" & k).Value
Range(AS501).Value = .Range("L" & k).Value
Range(AT501).Value = .Range("M" & k).Value
End If
Next
End With
With Wb.Sheets("ConstatsISO9001")
For k = 12 To .[A65536].End(3).Row
If .Range("S" & k) <> "" Then
Range(AO501).Value = .Range("B" & k).Value
Range(AP501).Value = .Range("O" & k).Value
Range(AQ501).Value = .Range("P" & k).Value
Range(AR501).Value = .Range("Q" & k).Value
Range(AS501).Value = .Range("R" & k).Value
Range(AT501).Value = .Range("S" & k).Value
End If
Next
End With
End Sub
Bonjour,
Normal que ta ligne ne fonctionne pas.
Tu déclares wb comme workbook mais plus bas tu ne dis pas quel workbook
Si ta macro se trouve dans le fichier où se trouve ta feuille ConstatsISO9001, essaie plutôt ceci -->
With Thisworkbook.Sheets("ConstatsISO9001")
Si ok, lors de ta réponse clique sur le V vert pour cloturer le fil de ta demande
Amicalement
Bonjour Dan,
Oui ma macro se trouve dans le fichier où se trouve ma feuille.
J'ai fais le changement mais maintenant c'est la ligne suivante qui s'affiche en jaune
Range(AO501).Value = .Range("B" & k).Value
Bonjour
Tes références de cellules entre " " (guillemets)
Range("AO501").Value = .Range("B" & k).Value
Merci pour vos réponses.
J'ai modifié le code car je me suis aperçu qu'en mettant le numéro de cellule dans le code (ex :
Range("AO501").Value = .Range("B" & k).Value
, il ne me prenait que les dernières valeurs qu'il me recopait dans les cellules AO501, AP501,... alors que je souhaite avoir toutes les valeurs et que ces valeurs soient recopiées dès la cellule AO501, AP501, AQ501, AR501, AS501 et AT501 et qu'il continue avec la cellule AO502, AP502, AQ502, AR502, AS502, AT502,...
Donc j'ai refais le code (voir ci-après) mais ce code ne recopie rien, j'ai même pas de message d'erreur. Si vous pouviez m'éclairer.
Private Sub CommandButton1_Click() 'en cours de réalisation'
Dim Wb As Workbook
With ThisWorkbook.Sheets("ConstatsISO9001")
For k = 12 To .[A65536].End(3).Row
If .Range("G" & k) <> "" Then
lig = [I65536].End(3).Row + 1
Range("AO" & lig).Value = .Range("B" & k).Value
Range("AP" & lig).Value = .Range("C" & k).Value
Range("AQ" & lig).Value = .Range("D" & k).Value
Range("AR" & lig).Value = .Range("E" & k).Value
Range("AS" & lig).Value = .Range("F" & k).Value
Range("AT" & lig).Value = .Range("G" & k).Value
End If
Next
End With
With ThisWorkbook.Sheets("ConstatsISO9001")
For k = 12 To .[A65536].End(3).Row
If .Range("M" & k) <> "" Then
lig = [I65536].End(3).Row + 1
Range("AO" & lig).Value = .Range("B" & k).Value
Range("AP" & lig).Value = .Range("I" & k).Value
Range("AQ" & lig).Value = .Range("J" & k).Value
Range("AR" & lig).Value = .Range("K" & k).Value
Range("AS" & lig).Value = .Range("L" & k).Value
Range("AT" & lig).Value = .Range("M" & k).Value
End If
Next
End With
With ThisWorkbook.Sheets("ConstatsISO9001")
For k = 12 To .[A65536].End(3).Row
If .Range("S" & k) <> "" Then
lig = [I65536].End(3).Row + 1
Range("AO" & lig).Value = .Range("B" & k).Value
Range("AP" & lig).Value = .Range("O" & k).Value
Range("AQ" & lig).Value = .Range("P" & k).Value
Range("AR" & lig).Value = .Range("Q" & k).Value
Range("AS" & lig).Value = .Range("R" & k).Value
Range("AT" & lig).Value = .Range("S" & k).Value
End If
Next
End With
End Sub
Bonjour
110 messages et personne ne t'a dit qu'avec un fichier cela serait mieux
Alors je serais le premier "Avec un fichier cela serait mieux"
Tu expliques ce tu veux comme résultat (fais un exemple) afin que l'on comprenne bien
Je pense que c'est plus le même qu'au départ de ce post
Je joins un fichier word qui sera plus explicite que de tout détailler dans le post.
Bonjour
thomasdu40 a écrit :Je joins un fichier word qui sera plus explicite que de tout détailler dans le post.
Je suis d'accord avec toi mais il manque toujours le fichier excel avec un (au moins) exemple de résultat attendu
Le voici. Il contient le dernier code que j'ai intégré dans le bouton intitulé "Tri" et présent dans la feuille constatsISO9001. J'ai saisi aléatoirement des exemples dans le tableau dès la ligne 12. Ces exemples je les ai recopiés dans la zone de tri (cellule AO501).
Au final je voudrai le même résultat via un code vba. N'hésites pas si tu veux plus d'infos.
Moi je continue de mon côté.
Bonjour
Avec ce code on fait d'abord la colonne G, puis la M et enfin la S
On pourrait traiter les 3 cellules dans la même boucle
Private Sub CommandButton1_Click() 'en cours de réalisation'
Dim K As Long
Dim Lig As Long
Dim DerLig As Long
Lig = 500
With Sheets("ConstatsISO9001")
.Rows("500:" & Rows.Count).Delete
DerLig = .Range("B" & Rows.Count).End(xlUp).Row
For K = 12 To DerLig
If .Range("G" & K) <> "" Then
Lig = Lig + 1
.Range("AO" & Lig).Value = .Range("B" & K).Value
.Range("AP" & Lig).Value = .Range("C" & K).Value
.Range("AQ" & Lig).Value = .Range("D" & K).Value
.Range("AR" & Lig).Value = .Range("E" & K).Value
.Range("AS" & Lig).Value = .Range("F" & K).Value
.Range("AT" & Lig).Value = .Range("G" & K).Value
End If
Next K
For K = 12 To DerLig
If .Range("M" & K) <> "" Then
Lig = Lig + 1
.Range("AO" & Lig).Value = .Range("B" & K).Value
.Range("AP" & Lig).Value = .Range("I" & K).Value
.Range("AQ" & Lig).Value = .Range("J" & K).Value
.Range("AR" & Lig).Value = .Range("K" & K).Value
.Range("AS" & Lig).Value = .Range("L" & K).Value
.Range("AT" & Lig).Value = .Range("M" & K).Value
End If
Next K
For K = 12 To DerLig
If .Range("S" & K) <> "" Then
Lig = Lig + 1
.Range("AO" & Lig).Value = .Range("B" & K).Value
.Range("AP" & Lig).Value = .Range("O" & K).Value
.Range("AQ" & Lig).Value = .Range("P" & K).Value
.Range("AR" & Lig).Value = .Range("Q" & K).Value
.Range("AS" & Lig).Value = .Range("R" & K).Value
.Range("AT" & Lig).Value = .Range("S" & K).Value
End If
Next K
End With
End Sub
Merci pour ton retour et je te confirme que le code fonctionne même si tu le savais déjà.
Mais je suis extrêmement étonné que le code initial, que j'ai complété afin d'y intégrer la ligne
lig = 500
et afin de modifier la ligne
lig = [I65536].End(3).Row + 1
pour la transformer en
lig = lig + 1
et ceci grâce à tes codes, ne fonctionne qu'au trois quart.
J'ai les infos de la colonne G et M qui sont répercutées dans mon tableau de tri. Mais il ne veut pas me recopier la colonne S dans le cas où celle-ci serait complétée.
Private Sub CommandButton1_Click() 'en cours de réalisation'
Dim Wb As Workbook
lig = 500
With ThisWorkbook.Sheets("ConstatsISO9001")
For k = 12 To .[A65536].End(3).Row
If .Range("G" & k) <> "" Then
lig = lig + 1
Range("AO" & lig).Value = .Range("B" & k).Value
Range("AP" & lig).Value = .Range("C" & k).Value
Range("AQ" & lig).Value = .Range("D" & k).Value
Range("AR" & lig).Value = .Range("E" & k).Value
Range("AS" & lig).Value = .Range("F" & k).Value
Range("AT" & lig).Value = .Range("G" & k).Value
End If
Next
End With
With ThisWorkbook.Sheets("ConstatsISO9001")
For k = 12 To .[A65536].End(3).Row
If .Range("M" & k) <> "" Then
lig = lig + 1
Range("AO" & lig).Value = .Range("B" & k).Value
Range("AP" & lig).Value = .Range("I" & k).Value
Range("AQ" & lig).Value = .Range("J" & k).Value
Range("AR" & lig).Value = .Range("K" & k).Value
Range("AS" & lig).Value = .Range("L" & k).Value
Range("AT" & lig).Value = .Range("M" & k).Value
End If
Next
End With
With ThisWorkbook.Sheets("ConstatsISO9001")
For k = 12 To .[A65536].End(3).Row
If .Range("S" & k) <> "" Then
lig = lig + 1
Range("AO" & lig).Value = .Range("B" & k).Value
Range("AP" & lig).Value = .Range("O" & k).Value
Range("AQ" & lig).Value = .Range("P" & k).Value
Range("AR" & lig).Value = .Range("Q" & k).Value
Range("AS" & lig).Value = .Range("R" & k).Value
Range("AT" & lig).Value = .Range("S" & k).Value
End If
Next
End With
End Sub
Bonjour
Si tu recopies le code copies le entièrement
Dans ce cas ce n'est pas important, mais tu n'as pas mis les points devant Range
J'avais englobé les 3 boucles dans le With .... End With
J'avais calculé une seule fois le nombre de ligne
Mais cela ne devrait pas empêcher la recopie si la cellule S.. est non vide
Ton fichier en faute devrait aider à trouver la solution
Oui j'avais vu que tu avais englobé les 3 boucles dans With.... End With. Pour mon code ce n'est pas le cas et comme les 2 premières boucles avec With... End With fonctionne je me suis dis que la 3ème boucle devrait fonctionner aussi. Ben non et j'ai beau essayer de trouver une solution pour que cette 3èm boucle fonctionne, rien n'y fait. Même en mettant les . devant range.
Ce code qui est la 3ème boucle correspondant à la colonne S m'ennerve vraiment :
With ThisWorkbook.Sheets("ConstatsISO9001")
For k = 12 To .[A65536].End(3).Row
If .Range("S" & k) <> "" Then
lig = lig + 1
.Range("AO" & lig).Value = .Range("B" & k).Value
.Range("AP" & lig).Value = .Range("O" & k).Value
.Range("AQ" & lig).Value = .Range("P" & k).Value
.Range("AR" & lig).Value = .Range("Q" & k).Value
.Range("AS" & lig).Value = .Range("R" & k).Value
.Range("AT" & lig).Value = .Range("S" & k).Value
End If
Next
End With
Bonjour
Que dire/faire/penser ?
Fais du pas à pas
Fournis le fichier en cause
La colonne S ne contient pas de données
Ca y est. Problème résolu.
La solution va vous paraitre bizarre mais j'ai uniquement changé le 3 qui était dans la ligne
For K = 12 To .[A65536].End(3).Row
en 2. Là j'ai toutes les infos présentes dans les cellules qui s'affichent dans la zone réservée au tri.
Voici le code final :
Private Sub CommandButton1_Click() 'en cours de réalisation'
Dim Wb As Workbook
Lig = 500
With ThisWorkbook.Sheets("ConstatsISO9001")
For K = 12 To .[A65536].End(2).Row
If .Range("G" & K) <> "" Then
Lig = Lig + 1
Range("AO" & Lig).Value = .Range("B" & K).Value
Range("AP" & Lig).Value = .Range("C" & K).Value
Range("AQ" & Lig).Value = .Range("D" & K).Value
Range("AR" & Lig).Value = .Range("E" & K).Value
Range("AS" & Lig).Value = .Range("F" & K).Value
Range("AT" & Lig).Value = .Range("G" & K).Value
End If
Next
End With
With ThisWorkbook.Sheets("ConstatsISO9001")
For K = 12 To .[A65536].End(2).Row
If .Range("M" & K) <> "" Then
Lig = Lig + 1
Range("AO" & Lig).Value = .Range("B" & K).Value
Range("AP" & Lig).Value = .Range("I" & K).Value
Range("AQ" & Lig).Value = .Range("J" & K).Value
Range("AR" & Lig).Value = .Range("K" & K).Value
Range("AS" & Lig).Value = .Range("L" & K).Value
Range("AT" & Lig).Value = .Range("M" & K).Value
End If
Next
End With
With ThisWorkbook.Sheets("ConstatsISO9001")
For K = 12 To .[A65536].End(2).Row
If .Range("S" & K) <> "" Then
Lig = Lig + 1
Range("AO" & Lig).Value = .Range("B" & K).Value
Range("AP" & Lig).Value = .Range("O" & K).Value
Range("AQ" & Lig).Value = .Range("P" & K).Value
Range("AR" & Lig).Value = .Range("Q" & K).Value
Range("AS" & Lig).Value = .Range("R" & K).Value
Range("AT" & Lig).Value = .Range("S" & K).Value
End If
Next
End With
Unload Me
End Sub
Bonjour
Bravo si tu as trouvé
Comme je n'utilise pas cette syntaxe, elle ne me paraissait pas suspecte