aide macro

Il y a 386 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : aide macro
 
Plus d'informations

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

Plus d'informations

Bonjour et bienvenue,  
Rajoute les balise code (y a un bouton pour cela) autour de ton code.
 
Ici on ne donne pas de solution toute faite mais on va t'aiguiller.
Donc regarde dans l'aide pour commencer :  
 
For, If, Dim, Long
 
Le but de ta macro est de parcourir les cellules de la colonne G puis si la cellule B est vide copier la valeur.


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
Plus d'informations

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

zeb
Profil : Modérateur libre
Plus d'informations

http://site.voila.fr/zulu-echo-bravo/img/balisecodeppc.png    http://site.voila.fr/zulu-echo-bravo/img/newbie_oups_je_corrige.png


Message édité par zeb le 21-09-2007 à 11:53:28

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

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
 
Comme ça le code ?

Plus d'informations

le deuxième cpp il faut un / devant pour marquer la fin (comme ca /cpp avec le crochet autour)
 

Code :
  1. msgbox "Ceci est du code formaté sur le forum"


Message édité par Freeman23 le 21-09-2007 à 14:22:21

---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème
zeb
Profil : Modérateur libre
Plus d'informations

:pfff:

 

Bon, pas à pas :

  • La balise au début est [cpp] (ou [code]), celle de la fin est [/cpp] (ou [/cpp])


  • Pour corriger ton premier message :

http://site.voila.fr/zulu-echo-bravo/img/newbie_oups_je_corrige.png

 

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 :)


Message édité par zeb le 21-09-2007 à 14:27:56

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

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

Code :
  1. Sub recopie()
  2. '
  3. ' recopie Macro
  4. ' Macro enregistrée le 20/09/2007 par CLAUDE
  5. '
  6. '
  7.     Columns("G:G" ).Select
  8.     Selection.Copy
  9.     Columns("B:B" ).Select
  10.     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  11.         :=False, Transpose:=False
  12.     Application.CutCopyMode = False
  13.     Range("A5" ).Select
  14. End Sub

Plus d'informations

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

Code :
  1. Sub recopie()
  2. '
  3. ' recopie Macro
  4. ' Macro enregistrée le 20/09/2007 par CLAUDE
  5. '
  6. '
  7.     Columns("G:G" ).Select
  8.     Selection.Copy
  9.     Columns("B:B" ).Select
  10.     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  11.         :=False, Transpose:=False
  12.     Application.CutCopyMode = False
  13.     Range("A5" ).Select
  14. End Sub


 

zeb
Profil : Modérateur libre
Plus d'informations

:fou: Grrrrrrr Je détecte le code tout pourri pondu par ce salaud d'enregistreur de macro. Beurk [:vomi]
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 :
  1. Sub recopie()
  2. ' Macro enregistrée le 20/09/2007 par CLAUDE et revue par PPC
  3.     Columns("G:G" ).Copy
  4.     Columns("B:B" ).PasteSpecial Paste:=xlPasteValues
  5.     Application.CutCopyMode = False   
  6. 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 :
  1. Sub recopie()
  2. ' Macro enregistrée le 20/09/2007 par CLAUDE et revue et corrigée par PPC
  3.     Columns("G:G" ).Copy Destination:=Columns("B:B" )
  4. 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 ?


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

a écrit :

:fou: Grrrrrrr Je détecte le code tout pourri pondu par ce salaud d'enregistreur de macro. Beurk [:vomi]
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 :
  1. Sub recopie()
  2. ' Macro enregistrée le 20/09/2007 par CLAUDE et revue par PPC
  3.     Columns("G:G" ).Copy
  4.     Columns("B:B" ).PasteSpecial Paste:=xlPasteValues
  5.     Application.CutCopyMode = False   
  6. 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 :
  1. Sub recopie()
  2. ' Macro enregistrée le 20/09/2007 par CLAUDE et revue et corrigée par PPC
  3.     Columns("G:G" ).Copy Destination:=Columns("B:B" )
  4. 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 !

Plus d'informations

Oui je crois que c'est ça, remplir les trous .

Plus d'informations

Désolé Zep, mais il faut que je m'absente pour ce soir ... Obligations familiales . Je reprendrai demain si tu veux bien .  
Bonne soirée .

zeb
Profil : Modérateur libre
Plus d'informations

Bonjour,
 
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 :

Range("B3" )
Cells(3, 2)


Pour une plage rectangulaire :

Range("B3:D6" )
Range(Range("B3" ), Range("D6" ))
Range(Cells(3, 2), Cells(6, 4))


Pour une colonne :

Range("C:C" )
Columns("C" ).Cells
Columns(3).Cells


Pour plusieurs colonnes contiguës :

Range("C:E" )
Columns("C:E" ).Cells


Pour une ligne :

Range("2:2" )
Rows("2" ).Cells
Rows(2).Cells


Pour plusieurs lignes contiguës :

Range("2:4" )
Columns("2:4" ).Cells


 
Pour parcourir chaque cellule de cette plage, on utilise For Each .. In .. Next.
Facile, quand on parle anglais.
 
Exemple : (Penser à faire [CTRL-Pause] quand on en a marre)

Code :
  1. Dim cellule As Range
  2. For Each cellule In Columns("G" ).Cells
  3.     MsgBox "Je suis la cellule " & cellule.Address & _
  4.            " (" & cellule.Row & ", " & cellule.Column & " )"
  5. Next


 
Grâce aux méthodes Row et Column, on va pouvoir désigner la cellule correspondante de la colonne B :

Code :
  1. Dim celluleG As Range, celluleB As Range
  2. For Each celluleG In Columns("G" ).Cells
  3.     Set celluleB = Cells(celluleG.Row, 2)
  4.     MsgBox celluleG.Address & " (" & celluleG.Row & ", " & celluleG.Column & " ) : " & celluleG.Text & Chr(13) & _
  5.            celluleB.Address & " (" & celluleB.Row & ", " & celluleB.Column & " ) : " & celluleB.Text
  6. Next


 
Y'a plus qu'à ...


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Salut Zeb
 
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 :
  1. Sub recopie()
  2. ' recopie Macro
  3. ' Macro enregistrée le 21/09/2007 par Claude SAINT-DIZIER
  4. ''
  5.     Columns("G:G" ).Copy
  6.     Columns("B:B" ).PasteSpecial Paste:=xlPasteValues
  7.     Application.CutCopyMode = False
  8.     Range("A4" ).Select
  9.     Columns("B:B" ).Select
  10.     Selection.AutoFilter
  11.     Selection.AutoFilter Field:=1, Criteria1:="#N/A"
  12.     Selection.ClearContents
  13.     Range("B7" ).Select
  14. 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 .  

zeb
Profil : Modérateur libre
Plus d'informations

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 :
  1. Sub recopie()
  2.     Dim r As Range
  3.     For Each r In Range("G:G" )
  4.         If Cells(r.Row, 2).Text = "" Then
  5.             Cells(r.Row, 2).Value = r.Value
  6.         End If
  7.     Next
  8. 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.


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Impeccable cette macro :

Code :
  1. Sub recopie()
  2. ' recopie Macro
  3. ' Macro enregistrée le 24/09/2007
  4. ''
  5.    Dim r As Range
  6.  
  7.         For Each r In Range("G3:G349" )
  8.         If Cells(r.Row, 2).Text = "" Then
  9.         Cells(r.Row, 2).Value = r.Value
  10.         End If
  11.         Next
  12.        
  13. End Sub

   
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
zeb
Profil : Modérateur libre
Plus d'informations

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èglement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
zeb
Profil : Modérateur libre
Plus d'informations

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 :o


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations