[Résolu]Aide pour terminer un code

rahamata

XLDnaute Nouveau
Bonjour le forum,

Etant une vraie nocive en VBA il y a encore un mois, j'arrive a en faire depuis 3 semaines:eek:. Mais malheureusement, je ne suis pas encore au niveau :confused:. En cherchant sur le forum, j'ai pu faire le code en pièce jointe (fichier exemple). Il manque un petit truc pour qu'il fonctionne parfaitement.

Voici mon problème :
J'ai un tableau qui ne sert de maquette (C5:K11). Si la colonne "A" est différent de vide alors copier/coller le tableau dans la 3ème colonne (soit la colonne "C") sur la même ligne que la colonne "A" non vide.
Le macros que j'ai réalisé fonctionne mais il me colle également le tableau dans les cases vides. Je ne sais plus quoi faire:(


Merci par avance de votre aide
 

Pièces jointes

  • tesT1.xlsm
    26.6 KB · Affichages: 47
  • tesT1.xlsm
    26.6 KB · Affichages: 48
  • tesT1.xlsm
    26.6 KB · Affichages: 52
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Aide pour terminer un code

Bonjour à toi et bienvenue sur ce forum..
hmmmm.. je pense que tu as utilisé l'enregistreur de macro.. ;-) et c'est très bien ! bien d'autres n'essaient meme pas..

Je te propose un peu de nettoyage ..
tous les scrolldowns.. on les supprime.. aucun interet pour la macro
et l'action de mise en forme est faite x fois... on peut n'en garder qu'une..


ensuite la macro de recopie du tableau "maquette"
en fait. la ligne
if "A"<>"" then..
ca revient à tester (en version texte) si 2 <> de 1..
bah oui forcément.. la lettre A est différente de vide..

on ne teste pas une colonne aussi simplement..
surtout que toi. tu veux ne tester que 3 cellules (A12 A19 et A26)

je dirais un truc dans le genre

Code:
For i = 12 To 26 Step 7
    If Cells(i, 1) <> "" Then
        Range("B5:K10").Copy Destination:=Range("B" & i)
    End If
Next i
End Sub
 

Paf

XLDnaute Barbatruc
Re : Aide pour terminer un code

Bonjour,

si j'ai bien compris, la macro corrigée:
Code:
Sub Macro1()
derlig = Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne pleine colonne A

For i = 12 To derlig ' de la 12ème à la dernière ligne
    If Cells(i, 1) <> "" Then 'si la cellule en ligne i et colonne 1 non vide
        Range("B5:K10").Copy Range("B" & i) 'copie de B5:K10 en ligne i de la colonne B
    End If
Next

End Sub

A+

edit: et paf ! bonjour vgendron
 

Dranreb

XLDnaute Barbatruc
Re : Aide pour terminer un code

Bonjour.

Vous pouvez faire ça comme ça, par exemple :
VB:
Sub Macro1()
Dim Cel As Range
For Each Cel In Columns("A:A").SpecialCells(xlCellTypeFormulas, 1)
   Range("B5:K10").Copy Destination:=Cel.Offset(, 1)
   Next Cel
End Sub

Edit: Ah, oui, carambolage général, forcément ! :D
 

vgendron

XLDnaute Barbatruc
Re : Aide pour terminer un code

hello Tous ! ;-)

et comme j'imagine que la demoiselle (nocive. ha ha ha. novice je suppose ;-) ) va nous demander les modifs suivantes;
comment recopier autant de fois qu'il y a un numéro de question dans la feuille "Feuill1"
voici une autre version..

1) j'ai nommé la liste des questions (zone jaune D1:D7) avec le nom "ListeQuestions"
2) modifié le nom des macros (Go et Effacer) car plus parlant pour la suite..
3) supprimé la formule en B5 du modèle.. en supposant qu'il s'agit de la question 0.
4) et donc. plus besoin de la colonne A

Sur ce. bon appétit ;-)
 

Pièces jointes

  • tesT1.xlsm
    23.9 KB · Affichages: 37
  • tesT1.xlsm
    23.9 KB · Affichages: 41
  • tesT1.xlsm
    23.9 KB · Affichages: 38

rahamata

XLDnaute Nouveau
Re : Aide pour terminer un code

merrrrrrciiiiiiiii à tous et surtout d'avoir anticiper ma 2ème question

Je rêve du jour où je deviendrai bilingue en VBA (j'adore).
La NOCIVE :p:eek: aimerait comprendre le code que vgendron a intégré dans le fichier :

Range("B5:K10").Copy Destination:=Range("B" & Debut) : pourquoi on écrit : ("B" & Debut) ? Je pense que "B" indique la colonne où le tableau doit commencer. Dans ce cas, pourquoi on écrit "& Debut" ?

Cells(Debut, 2) = Q --> est ce que "Q" est une lettre au hasard ? ou "Q" fait référence à quelque chose de précise ?
Debut = Debut + 7 --> le + 7 renvoye au nombre de ligne du tableau ?

Merci d'avance de contribuer à mon apprentissage:eek:
 

vgendron

XLDnaute Barbatruc
Re : [Résolu]Aide pour terminer un code

Range("B5:K10").Copy Destination:=Range("B" & Debut) : pourquoi on écrit : ("B" & Debut) ? Je pense que "B" indique la colonne où le tableau doit commencer. Dans ce cas, pourquoi on écrit "& Debut" ?



Effectivement. B correspond à la colonne, et Debut. le numéro de la ligne
pour définir une cellule tu as plusieurs méthodes en fait: pour la cellule B12 par exemple
soit
Cells(12,2) 2 étant la colonne B: ca oblige à compter le nombre de colonne...
soit
Range("B12"): te donne directement le nom de la cellule mais il s'agit la du cas particulier d'une range à une seule cellule

ou encore
[B12] .. le je t'avoue ne pas savoir ce que ca implique. je l'ai juste vu ailleurs..


quand tu ne connais pas à l'avance le numéro de la ligne (ou meme de la colonne ou des deux), tu remplaces le numéro de ligne (ici 12) par une variable (ici Debut) selon une syntaxe particulière
à savoir "B12" est remplacé par "B" &12
-->la chaine de caractère B12 (délimitée par les guillemets) est fabriquée en concaténant (opérateur &) la lettre B et le contenu de la variable Début

Cells(Debut, 2) = Q --> est ce que "Q" est une lettre au hasard ? ou "Q" fait référence à quelque chose de précise ?

pour la lettre Q: non pas de raison particulière. si ce n'est que j'aime bien utiliser des noms de variables en rapport avec ce qu'elles désignent.. ici. Q comme Question ;-)

Debut = Debut + 7 --> le + 7 renvoye au nombre de ligne du tableau ?
et 7.. c'est le nombre de lignes qui séparent deux tableaux consécutifs..

Voila.. en espérant que ca soit plus clair pour toi..euh. suis pas convaincu sur ce coup la ;-)
n'hésite pas à faire appel à nouveau au forum..
 

rahamata

XLDnaute Nouveau
Re : [Résolu]Aide pour terminer un code

Bonjour vgendron
Bonjour le forum,

Merci pour les explications, je suis contente d'avoir appris des choses.
Mais si je peux abuser de ta gentillesse, j'aimerais pousser la question précédente plus loin. Est- ce que pour toutes les formules "= si " doivent s’écrire comme suit :

For Each ...
If ... Then
.....

End If
Next ...

Est - ce qu'on est obligé de déclarer une variable ?

Je sais que j'abuse:eek: mais c'est pour une bonne cause ;). Mais merci déjà pour les explications
 

Statistiques des forums

Discussions
312 198
Messages
2 086 137
Membres
103 129
dernier inscrit
Atruc81500