Bonjour
Nouveau sur ce site, j'ai besoin d'un coup de main . Voilà, j'ai fait une petite macro ( enregistrée ) c'est tout ce que j'arrive à faire, disant de copier l'ensemble de ma colonne G dans la colonne B . Cela fonctionne parfaitement, mais il me faudrait une condition dans cette macro qui ne copie ( copie/ collage spéciale valeur )
les données de la colonne G uniquement dans les cellules vides de ma colonne B . Ci dessous ma macro :
Sub recopie()
'
' recopie Macro
' Macro enregistrée le 20/09/2007 par CLAUDE
'
'
Columns("G:G" ).Select
Selection.Copy
Columns("B:B" ).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("A5" ).Select
End Sub
Quelqu'un peut-il me la compléter ? Merci d'avance aux pro de la VBA
Bonjour Freeman23
"Rajoute les balise code (y a un bouton pour cela) autour de ton code.", ou est le bouton ? et à quoi ça sert ? Excuse moi si je ne comprends pas, mais je n'y connait absolument rien en VBA . Je sais juste enregistrer une suite de commandes souris que je sais mettre sur un bouton
Bonjour
Nouveau sur ce site, j'ai besoin d'un coup de main . Voilà, j'ai fait une petite macro ( enregistrée ) c'est tout ce que j'arrive à faire, disant de copier l'ensemble de ma colonne G dans la colonne B . Cela fonctionne parfaitement, mais il me faudrait une condition dans cette macro qui ne copie ( copie/ collage spéciale valeur )
les données de la colonne G uniquement dans les cellules vides de ma colonne B . Ci dessous ma macro :
[cpp]
Sub recopie()
'
' recopie Macro
' Macro enregistrée le 20/09/2007 par CLAUDE
'
'
Columns("G:G" ).Select
Selection.Copy
Columns("B:B" ).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("A5" ).Select
End Sub
[cpp]
quelqu'un peut-il me la compléter ? Merci d'avance aux pro de la VBA
La balise au début est [cpp] (ou [code]), celle de la fin est [/cpp] (ou [/cpp])
Pour corriger ton premier message :
Je me ferai un plaisir de supprimer tous ces messages inutiles quand ton premier message sera correctement écrit. En passant, tu aurais pu lire le règlement, tu aurais su tout ça sans te faire rappeler à l'ordre.
Peut-être nous trouves-tu tatillon sur la forme, mais c'est vraiment important. Pour plein de bonnes raisons : la première à mon sens, montrer un peu de respect envers ceux qui t'aideront sans contrepartie
Voila je pense que c'est juste . Et bien dis donc j'ai beaucoup à apprendre; sur les règles, sur l'écriture . Pardon d'avance pour les erreurs qui suivront sans doute . je vais m'appliquer
Voila je pense que c'est juste . Et bien dis donc j'ai beaucoup à apprendre; sur les règles, sur l'écriture . Pardon d'avance pour les erreurs qui suivront sans doute . je vais m'appliquer
Grrrrrrr Je détecte le code tout pourri pondu par ce salaud d'enregistreur de macro. Beurk Et ne t'avais-je pas proposé de modifier ton premier message pour me permettre de virer toutes ces remarques sur la forme ? Spa grave.
---------------------------------------
Alors voilà, je ne supporte pas de voir des Select/Selection dans une macro.
Oui, je sais c'est l'enregistreur de macro qui te l'a écrit.
Ton code revu et corrigé :
Code :
Sub recopie()
' Macro enregistrée le 20/09/2007 par CLAUDE et revue par PPC
Columns("G:G" ).Copy
Columns("B:B" ).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
J'ai viré ta ligne 14, je suppose qu'elle était inutile.
J'ai viré les paramètres par défaut de PasteSpecial.
Ne trouves-tu pas ce code plus lisible ?
Alors voilà, je ne supporte pas non plus de voir des Copy/Paste/CutCopyMode.
Oui, je sais c'est enregistreur de macro qui te l'a écrit.
Pourquoi passer par le presse-papier ?
Ton code, re-revu et re-corrigé :
Code :
Sub recopie()
' Macro enregistrée le 20/09/2007 par CLAUDE et revue et corrigée par PPC
Grrrrrrr Je détecte le code tout pourri pondu par ce salaud d'enregistreur de macro. Beurk Et ne t'avais-je pas proposé de modifier ton premier message pour me permettre de virer toutes ces remarques sur la forme ? Spa grave.
---------------------------------------
Alors voilà, je ne supporte pas de voir des Select/Selection dans une macro.
Oui, je sais c'est l'enregistreur de macro qui te l'a écrit.
Ton code revu et corrigé :
Code :
Sub recopie()
' Macro enregistrée le 20/09/2007 par CLAUDE et revue par PPC
Columns("G:G" ).Copy
Columns("B:B" ).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
J'ai viré ta ligne 14, je suppose qu'elle était inutile.
J'ai viré les paramètres par défaut de PasteSpecial.
Ne trouves-tu pas ce code plus lisible ?
Alors voilà, je ne supporte pas non plus de voir des Copy/Paste/CutCopyMode.
Oui, je sais c'est enregistreur de macro qui te l'a écrit.
Pourquoi passer par le presse-papier ?
Ton code, re-revu et re-corrigé :
Code :
Sub recopie()
' Macro enregistrée le 20/09/2007 par CLAUDE et revue et corrigée par PPC
Columns("G:G" ).Copy Destination:=Columns("B:B" )
End Sub
Ah, voilà, c'est lisible maintenant.
Bon, je ne comprends pas bien ton problème.
B G
132 789
23 86
<- 78
76 82
6 456
<- 998
785 7
C'est ça que tu veux, remplir les trous ?
Salut Zeb
Oh là quelle épuration !! Ta première version marche bien, mais , sauf erreur de ma part la deuxième ne fonctionne pas, elle me mets "REF" dans la cellule .
En fait, peut-être que cela vient de mes explications ?
Je vais essayer d'être plus clair et complet . J'ai dans une première feuille colonne A tout une série de code ( du type plafv, plafi, etc..)
Toujours dans ma première feuille colonne B des description dans chaque cellule en face de ces codes. Ensuite dans ma deuxième feuille, dans la colonne A je saisi ou je choisi ( j'ai fait une liste validée ) un code, qui avec la fonction RECHERCHEV me met dans la colonne G ma description, je la copie avec cette macro par un copier/collage spécial valeur dans la colonne B ( collage spéciale car j'ai besoin à chaque fois de compléter ce texte ) . Il faut donc, que lorsque j'ai lancé cette macro elle ne me modifie pas les textes que je viens de modifier . Donc il faut que je la complète par une condition qui lui ferait copier uniquement dans les cellules vides de ma colonne B .
Je ne sais pas si je suis clair dans mes explications . Mile excuses !
Sois précis s'il te plaît quand tu cites un message d'erreur.
Je suppose que "REF", c'est pour "#REF!".
Cela vient du fait qu'il y a des formules relatives dans tes cellules (ce qui est légitime).
D'ailleurs, le "Paste:=xlPasteValues" de ton code aurait dû me mettre la puce à l'oreille.
Tes nouvelles explications sont bien plus claires, effectivement.
Au plus simple :
parcourir la plage des cellules de la colonne G,
Pour chaque cellule, vérifier s'il y a un "trou" en face, dans la colonne B
Si oui, y recopier le texte de G.
Une plage de cellules se définit avec les fonctions suivantes :
Pour une plage de une cellule :
Oh là, ça c'est une leçon de VBA . J'ai un peu de scrupule à te faire travailler comme ça . De mon côté, avec le peu de moyen que j'ai ( mon humble raisonnement, et ce " putain d'enregistreur " ) j'ai par des moyens qui ne sont sans doute pas de la vrai programmation, réussi à faire à peu près ce que je veux . En fait j'ai changer ma formule RECHERCHEV comme ça : =SI(B5<>"";B5;RECHERCHEV(A5;descro;2;0)), puis ma macro comme ceci :
Code :
Sub recopie()
' recopie Macro
' Macro enregistrée le 21/09/2007 par Claude SAINT-DIZIER
''
Columns("G:G" ).Copy
Columns("B:B" ).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Range("A4" ).Select
Columns("B:B" ).Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="#N/A"
Selection.ClearContents
Range("B7" ).Select
End Sub
J'ai essayé de mettre ta macro, mais cela bloque sur un message qu'il faut valider à chaque fois : $G$1(1,7):
$B$1(1,2):
Je ne comprend pas ou faut-il mettre ce complément de macro par rapport à ma première macro de copie ? Est ce qu'elle remplace ma macro ? Désolé si ça ne rentre pas dans ma petite tête .
Tu n'as pas de scrupule à avoir. Si je ne veux pas répondre, et bien je ne répondrais pas.
Lignes 8, 13. Explique-moi pourquoi tu laisses ces lignes.
Lignes 9, 10, 11. Non. Comprends ce que tu fais. Et simplifie tous les Truc.Select / Selection.Machin en Truc.Machin.
Tu mélanges un peu les genres. D'un côté des formules Excel et de l'autre du VB. Je ne répondrais que sur le VB (Ici, c'est programmation)
Je te proposais ceci :
Citation :
parcourir la plage des cellules de la colonne G,
Pour chaque cellule, vérifier s'il y a un "trou" en face, dans la colonne B
Si oui, y recopier le texte de G.
La suite, ce n'était que des éléments pour réussir.
Tu veux TOUTE la colonne G. Alors en avant :
Code :
Sub recopie()
Dim r As Range
For Each r In Range("G:G" )
If Cells(r.Row, 2).Text = "" Then
Cells(r.Row, 2).Value = r.Value
End If
Next
End If
Et voilà !
Evidemment, La colonne G, c'est 65536 cellules. Ca peut être long. Si tu ne donnes pas de condition pour sortir plus tôt, il va te falloir patienter quelques secondes.
Merci bien, par rapport à mon sombre mélange fonction/macro, c'est autre chose !!
Je vais abuser, tans pis je me lance . N'est-il pas possible dans ma colonne A où j'ai validé une liste qui me déroule un tout petit menu, d'avoir mieux, par exemple un petit chant de saisie dans lequel je tapperais les premières lettres de mon code qui me placerais tous les codes commençant par "pla". Eh oui, cette liste de code va au fur et à mesure augmenter, et comme j'ai une petite mémoire, ça serait bien .
Message édité par sadicla le 24-09-2007 à 17:58:41
Si tu as tout compris à cette macro, j'en suis ravi.
Risques-tu d'avoir plus de 347 lignes ?
Si oui, il serait bon que tu cherches à savoir où est la dernière ligne non vide de ta colonne. Ici un laïus sur le sujet : http://www.presence-pc.com/forum/p [...] htm#t33991
Ton idée d'aide à la saisie est séduisante mais exige un peu plus de boulot qu'une simple macro. Je regarde ça et reviens en parler....
Réflexion faite, c'est impossible. Il n'y a pas d'événement dans VBA/Excel pour intercepter la frappe dans une cellule.
Spoiler :
Rien n'est impossible, sinon au prix d'un ENORME travail non réalisable en VB/Excel. Mais VB tout court peut tout donc c'est faisable. Contre 60000€ je te le fais pour dans 6 mois