VBA - Recopier automatiquement sur trois colonnes

nobilis Messages postés 32 Date d'inscription vendredi 11 février 2005 Statut Membre Dernière intervention 21 mars 2005 - 15 mars 2005 à 09:31
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 - 15 mars 2005 à 14:27
Bonjour,

J'essaie désepérément de créer une macro qui me permettra d'obtenir le résultat suivant :
lorsque j'encode une valeur sur une ligne (1 à 10) dans la 3ème colonne, les colonnes 4, 5 et 6 doivent insérer automatiquement cette valeur sur la même ligne. Idem pour 4ème colonne, 5ème colonne, 6ème colonne et 7ème colonne.

Par exemple, si je mets "Johann" sur la 1ère ligne de la 3ème colonne, la 1ère ligne des colonnes 4, 5 et 6 doit contenir "Johann" après exécution de la macro.

Et si je mets "Nadia" sur la 2ème ligne de la 5ème colonne, la 2ème ligne des colonnes 6, 7 et 8 doit contenir "Nadia" après exécution de la macro.

En vous remerciant d'avance

5 réponses

tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
15 mars 2005 à 10:12
Lolllllllllllllllllllllllllllllllllllllllllllllllll

C'est difficilement compréhensible comme question

Déjà, on ne voit pas trop à quoi ça sert donc c'est obscure, en plus tu
t'embrouilles dans les explications et ça devient pire. Bref, personne
n'a envie de répondre à ça. Excepté Mr Phil 8D, j'ai fait un ptit
schéma pour essayer de comprendre ce que tu as voulu dire, c'est dire
si je fais des efforts pour te répondre... lol

Donc, comme je disais, pourquoi insers-tu une valeur au beau milieu
d'une colonne et qui plus est pourquoi veux-tu recopier cette valeur
dans les autre colonne??? Quel est l'utilité si tu as déjà la valeur
dans une colonne pourquoi la dupliquer? A mon avis, il doit y avoir un
problème dans ta conception. D'ou l'utilité d'expliquer pourquoi tu
veux faire ça.

Sinon, je pense qu'une requete update serait la bien venu pour ton problème.

D'abord, tu fais une boucle for avec dlookup pour vérifier chaque
colonne à la ligne désirée pour voir si tu as un nom et tu fais un
update de la ligne en mettant la valeur trouvée dans chaque colonne.
D'après ce que tu dis, cela pourrait-être une solution.

TBBUIM
0
nobilis Messages postés 32 Date d'inscription vendredi 11 février 2005 Statut Membre Dernière intervention 21 mars 2005 1
15 mars 2005 à 10:31
Bon, bon, bon... Je vais essayer d'expliquer le contexte.

En fait, je voudrais accélérer l'encodage de mon tableau. Il s'agit d'un outil de planification. Une colonne correspond à 1/2 heure or la plupart des tâches ont une durée de deux heures. Donc, pour gagner en rapidité, je voudrais que lorsque le nom d'une personne est insérée dans une cellule (la ligne correspond à une tâche précise et la colonne à une heure précise, par exemple 8h30), le nom de la personne apparaisse également à 9h, 9h30 et 10h (donc les 3 colonnes suivantes) qd la macro est lancée (ou directement à l'encodage ??).

Voici le programme que j'ai fait mais il ne fonctionne pas correctement.

For i = 8 To 474 'pour les lignes 8 à 474

If Cells(i, 3).Value <> "" Then
Cells(i, 4).Value = Cells(i, 3).Value
Cells(i, 5).Value = Cells(i, 3).Value
Cells(i, 6).Value = Cells(i, 3).Value
End If


If Cells(i, 4).Value <> "" Then
Cells(i, 5).Value = Cells(i, 4).Value
Cells(i, 6).Value = Cells(i, 4).Value
Cells(i, 7).Value = Cells(i, 4).Value
End If


If Cells(i, 5).Value <> "" Then
Cells(i, 6).Value = Cells(i, 5).Value
Cells(i, 7).Value = Cells(i, 5).Value
Cells(i, 8).Value = Cells(i, 5).Value
End If


If Cells(i, 6).Value <> "" Then
Cells(i, 7).Value = Cells(i, 6).Value
Cells(i, 8).Value = Cells(i, 6).Value
Cells(i, 9).Value = Cells(i, 6).Value
End If


If Cells(i, 7).Value <> "" Then
Cells(i, 8).Value = Cells(i, 7).Value
Cells(i, 9).Value = Cells(i, 7).Value
Cells(i, 10).Value = Cells(i, 7).Value
End If


If Cells(i, 8).Value <> "" Then
Cells(i, 9).Value = Cells(i, 8).Value
Cells(i, 10).Value = Cells(i, 8).Value
Cells(i, 11).Value = Cells(i, 8).Value
End If



Next i
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
15 mars 2005 à 11:36
Haaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

fallait le dire que tu étais sous Excel!

Le VBA s'utilise sous Word, outlook, Access, PPT, Excel, donc on peut
pas deviner. En plus si tu parles de colonnes, il peut s'agir de
colonne de table Access lol

Comme quoi tu vois que c'est utile de préciser ce genre de chose.

Au lieu de recopier le nom 50000 fois, ne serait-il pas plus propre de fusionner les cellules?

quand tu dis que ça ne fonctionne pas correctement, ça veut dire quoi?
Ca marche une fois sur deux, ça marche que si le nom est dans telle
colonne et pas une autre, ça marche pas du tout??? C'est normal que ça
ne marche pas, tu vérifies des colonnes qui ont été remplie!

tu mets des noms dans 3,4,5,6 et après tu revérifies 4 du coup, tu remets le mm nom dans 4, 5, 6,7 donc ça fou la merde partout!

Comment se passe le remplissage initial du tableau?

Tu mets le nom des gens à 8h ensuite une autre à 10h etc et ensuite tu
lances la requête pour que ça se copie à 8h30 à 9h à 9h30 et ainsi de
suite?

Donc pour ne pas revérifier 50000 fois la mm colonne et donc dupliquer
le 1er nom dans toutes les colonnes, il faut d'abord récupérer le n°
des colonnes qui ont un nom dans un tableau et récupérer les noms dans
un autre tableau. Essayes ça ;)

Dim tabCol(5), x,y as integer

Dim tabNom(5) as string

For i = 8 To 474

For x=0 to 5 'initialisation des tables à chaque ligne

TabCol(x) = 0

TabNom(x) = ""

Next x


y = 0

for x=3 to 8

if cell(i,x) <> "" then TabCol(y) x: TabNom(y) Cell(i,x): y= y+1


next x

for y = 0 à 5 'donc 6 éléments

if (TabCol(y) <> 0) then

cell(i,TabCol(y)+1) = TabNom(y)

cell(i,TabCol(y)+2) = TabNom(y)

cell(i,TabCol(y)+3) = TabNom(y)

end if

Next y

Next i
TBBUIM
0
nobilis Messages postés 32 Date d'inscription vendredi 11 février 2005 Statut Membre Dernière intervention 21 mars 2005 1
15 mars 2005 à 12:21
Grand merci, ça fonctionne mais je t'avoue que je ne comprends pas tout !

Afin de m'améliorer, pourrais-tu m'expliquer en détails le fonctionnement du programme ?

Pourquoi les tableaux comprennent-ils 6 valeurs (TabCol(5) et TabNom(5)) ?

Dim tabCol(5), x, y As Integer
Dim tabNom(5) As String
For i = 8 To 474
For x = 0 To 5 'initialisation des tables à chaque ligne
tabCol(x) = 0
tabNom(x) = ""
Next x
y = 0
For x = 3 To 8 If Cells(i, x) <> "" Then tabCol(y) x: tabNom(y) Cells(i, x): y = y + 1
Next x
For y = 0 To 5 'donc 6 éléments
If (tabCol(y) <> 0) Then
Cells(i, tabCol(y) + 1) = tabNom(y)
Cells(i, tabCol(y) + 2) = tabNom(y)
Cells(i, tabCol(y) + 3) = tabNom(y)
End If
Next y
Next i

Nobilis
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
15 mars 2005 à 14:27
C'est simple. tu teste les colonnes 3,4,5,6,7,8 donc 6 colonnes...

Mais bon, il est vrai que tu n'auras à chaque fois au plus que 2 ou 3 noms différents par ligne.

tu peux donc faire des tableaux de 3 à toi de voir.

J'ai mis 6 car j'ai écris ça un peu rapidement en fonction du nombre de colonne.

Bref, en fait, une fois, les noms et n° des colonnes stockés dans les
tableaux , il ne reste plus qu'à les ressortir et les dupliquer. Ainsi
,tu ne vérifies qu'une seule fois les colonnes.

For x = 3 To 8 'Vérifie chaque colonne et stock les noms et les n° de colonne ou il y a un nom If Cells(i, x) <> "" Then tabCol(y) x: tabNom(y) Cells(i, x): y = y + 1

Next x

Les tableaux et les boucles for sont très utiles sous Excel. Evite de faire des séries de if

C'est moche et bien souvent, ça peut être remplacé par un select case ou un for.

Joue avec les variables plutot que de faire des copiers coller


TBBUIM
0
Rejoignez-nous