Connaissant VB6 mais très peu VBA Excel, je me permets de vous solliciter
pour m'aider à faire une tache répétitive.
Soit deux feuilles de données A et B dans deux classeurs différents (mais à
la limite je peux les mettre dasn le même classeur)
Mon problème est que je doit fusionner deux feuilles en une seule de la
façon suivante.
Soit une feuille A qui contient mes données principales et une feuille B qui
contient les données à ajouter.
ma feuille B contient N lignes (env 1500).
je veux parcourir ces lignes et pour chaque ligne je dois prendre le contenu
de 3 cellules situées donc dans trois colonnes différentes que je mets dans
3 variables.
lorsque j'ai ces 3 variables je dois parcourir l'autre feuille (A) pour voir
s' il y a une ligne donc 3 cellules (indice de colonne connu) qui contient
les mêmes valeurs. Si oui alors je reviens dans la feuille d'origine
(feuille B) et je dois copier le contenu de trois autres cellules (colonnes
connues) de cette même ligne dans trois cellules de la feuille A (colonnes
connues).
Il est possible que dans le feuille A il y ait plusieurs lignes qui soient
valables. il faut donc pouvoir parcourir la aussi tout le tableau de A avant
de changer de ligne dans B.
j'aurai voulu donc savoir dans un premier temps comment parcourir un tableau
de la ligne 1 à la ligne N non vide ?
Et ensuite comment récupérer la valeur d'une cellule pour la mettre dans une
variable ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
fraction
j'aurai voulu donc savoir dans un premier temps comment parcourir un tabl eau de la ligne 1 à la ligne N non vide ?
J'ai une solution de bric et de broc, mais les autres contributeurs ont sûrement mieux :
Dim nbchamps, compteur, compteur2 as Integer, condition, condition2 as Boolean
nbchamps = ' Là, tu écris le nombre de la plus grande colonne condition = False compteur = 0
While not condition = True compteur = compteur + 1 condition2 = False For compteur2 = 1 to nbchamps If Feuil1.Cells(compteur,compteur2) <> "" Then condition2 = True Endif Next compteur2 If condition2 = True Then 'Là, tu écris ta manipulation (compteur est le numéro de la ligne, et tu dois remplacer Feuil1 par le nom de la feuille à étudier) Endif If Feuil1.Cells(compteur,1) = "" And Feuil1.Cells(compteur + 1, 1) = "" Then condition = True 'Ca c'est la condition de sortie de la boucle, j'ai considéré que si deux lignes consécutives sont vides dans leur colonne 1, alors il faut sortir Endif Wend
Et ensuite comment récupérer la valeur d'une cellule pour la mettre d ans une variable ?
Le tout est de bien déclarer ta variable. Si le contenu de ta cellule est un texte :
Dim variable As String
variable = Feuil1.Cells(ligne, colonne) ' remplace ligne par le numéro de la ligne, colonne par le numéro de la colonne, et Feuil1 par le nom de ta feuille
merci pour vos pistes
Driss
j'aurai voulu donc savoir dans un premier temps comment parcourir un tabl eau
de la ligne 1 à la ligne N non vide ?
J'ai une solution de bric et de broc, mais les autres contributeurs
ont sûrement mieux :
Dim nbchamps, compteur, compteur2 as Integer, condition, condition2 as
Boolean
nbchamps = ' Là, tu écris le nombre de la plus grande colonne
condition = False
compteur = 0
While not condition = True
compteur = compteur + 1
condition2 = False
For compteur2 = 1 to nbchamps
If Feuil1.Cells(compteur,compteur2) <> "" Then
condition2 = True
Endif
Next compteur2
If condition2 = True Then
'Là, tu écris ta manipulation (compteur est le numéro de la
ligne, et tu dois remplacer Feuil1 par le nom de la feuille à étudier)
Endif
If Feuil1.Cells(compteur,1) = "" And Feuil1.Cells(compteur + 1,
1) = "" Then
condition = True 'Ca c'est la condition de sortie de la boucle,
j'ai considéré que si deux lignes consécutives sont vides dans leur
colonne 1,
alors il faut sortir
Endif
Wend
Et ensuite comment récupérer la valeur d'une cellule pour la mettre d ans une
variable ?
Le tout est de bien déclarer ta variable. Si le contenu de ta cellule
est un texte :
Dim variable As String
variable = Feuil1.Cells(ligne, colonne) ' remplace ligne par le numéro
de la ligne, colonne par le numéro de la colonne, et Feuil1 par le nom
de ta feuille
j'aurai voulu donc savoir dans un premier temps comment parcourir un tabl eau de la ligne 1 à la ligne N non vide ?
J'ai une solution de bric et de broc, mais les autres contributeurs ont sûrement mieux :
Dim nbchamps, compteur, compteur2 as Integer, condition, condition2 as Boolean
nbchamps = ' Là, tu écris le nombre de la plus grande colonne condition = False compteur = 0
While not condition = True compteur = compteur + 1 condition2 = False For compteur2 = 1 to nbchamps If Feuil1.Cells(compteur,compteur2) <> "" Then condition2 = True Endif Next compteur2 If condition2 = True Then 'Là, tu écris ta manipulation (compteur est le numéro de la ligne, et tu dois remplacer Feuil1 par le nom de la feuille à étudier) Endif If Feuil1.Cells(compteur,1) = "" And Feuil1.Cells(compteur + 1, 1) = "" Then condition = True 'Ca c'est la condition de sortie de la boucle, j'ai considéré que si deux lignes consécutives sont vides dans leur colonne 1, alors il faut sortir Endif Wend
Et ensuite comment récupérer la valeur d'une cellule pour la mettre d ans une variable ?
Le tout est de bien déclarer ta variable. Si le contenu de ta cellule est un texte :
Dim variable As String
variable = Feuil1.Cells(ligne, colonne) ' remplace ligne par le numéro de la ligne, colonne par le numéro de la colonne, et Feuil1 par le nom de ta feuille
merci pour vos pistes
Driss
fraction
PS : le nom de la feuille n'est pas celui de l'onglet. C'est celui qui s'affiche avant la parenthèse dans la fenêtre "VBA project". Sinon, si tu veux utiliser le nom de l'onglet, à la place de "Feuil1", il faut écrire sheets("Répertoire"), si le nom de l'onglet est "Répertoire".
PS : le nom de la feuille n'est pas celui de l'onglet. C'est celui qui
s'affiche avant la parenthèse dans la fenêtre "VBA project". Sinon, si
tu veux utiliser le nom de l'onglet, à la place de "Feuil1", il faut
écrire sheets("Répertoire"), si le nom de l'onglet est "Répertoire".
PS : le nom de la feuille n'est pas celui de l'onglet. C'est celui qui s'affiche avant la parenthèse dans la fenêtre "VBA project". Sinon, si tu veux utiliser le nom de l'onglet, à la place de "Feuil1", il faut écrire sheets("Répertoire"), si le nom de l'onglet est "Répertoire".
Hervé
Bonjour Driss,
A adapter et à tester ceci (sur une copie du classeur après avoir mis les deux feuilles dedans) :
Sub RecupValeurs()
Dim PlageA As Range Dim PlageB As Range Dim CelA As Range Dim CelB As Range Dim Valeur As Variant Dim ValeurCherchee As Variant
'les 2 feuilles sont dans le même classeur ! 'les feuilles se nomment A et B, à adapté...!
'défini la grandeur de la plage sur la colonne A 'pour les 2 feuilles With Worksheets("A") Set PlageA = .Range(.[A1], .[A65536].End(xlUp)) End With
With Worksheets("B") Set PlageB = .Range(.[A1], .[A65536].End(xlUp)) End With
'parcour la colonne A de la feuille B For Each CelB In PlageB
'concatène les trois valeurs situées en colonne A, B et C 'de la feuille B pour simplifier la recherche ValeurCherchee = CelB & CelB.Offset(0, 1) & CelB.Offset(0, 2)
'puisqu'il y a possibilité de plusieurs lignes correspondant 'au critère, il faut mouliner sur la feuille A, le parcourt ligne 'par ligne se fait sur la colonne A For Each CelA In PlageA
'concatène les trois valeurs situées en colonne D, E et F 'de la feuille A pour comparaison aux colonnes A, B et C de 'la feuille B, à adapté...! Valeur = CelA.Offset(0, 3) & _ CelA.Offset(0, 4) & _ CelA.Offset(0, 5)
'si la valeur est trouvée If ValeurCherchee = Valeur Then
With PlageA 'colle le contenu de la cellule D 'de la feuille B dans la colonne G 'de la feuille A, de même pour les autres, à adapté...! 'D dans G .Offset(0, 6) = Cel.Offset(0, 3) 'E dans H .Offset(0, 7) = Cel.Offset(0, 4) 'F dans I .Offset(0, 8) = Cel.Offset(0, 5) End With
End If
Next CelA
Next Cel
Set CelA = Nothing Set CelB = Nothing Set PlageA = Nothing Set PlageB = Nothing
End Sub
Hervé.
Le 27/05/2010 16:43, Driss HANIB a écrit :
Bonjour à tous
Connaissant VB6 mais très peu VBA Excel, je me permets de vous solliciter pour m'aider à faire une tache répétitive.
Soit deux feuilles de données A et B dans deux classeurs différents (mais à la limite je peux les mettre dasn le même classeur)
Mon problème est que je doit fusionner deux feuilles en une seule de la façon suivante.
Soit une feuille A qui contient mes données principales et une feuille B qui contient les données à ajouter.
ma feuille B contient N lignes (env 1500). je veux parcourir ces lignes et pour chaque ligne je dois prendre le contenu de 3 cellules situées donc dans trois colonnes différentes que je mets dans 3 variables. lorsque j'ai ces 3 variables je dois parcourir l'autre feuille (A) pour voir s' il y a une ligne donc 3 cellules (indice de colonne connu) qui contient les mêmes valeurs. Si oui alors je reviens dans la feuille d'origine (feuille B) et je dois copier le contenu de trois autres cellules (colonnes connues) de cette même ligne dans trois cellules de la feuille A (colonnes connues). Il est possible que dans le feuille A il y ait plusieurs lignes qui soient valables. il faut donc pouvoir parcourir la aussi tout le tableau de A avant de changer de ligne dans B.
j'aurai voulu donc savoir dans un premier temps comment parcourir un tableau de la ligne 1 à la ligne N non vide ? Et ensuite comment récupérer la valeur d'une cellule pour la mettre dans une variable ?
merci pour vos pistes
Driss
Bonjour Driss,
A adapter et à tester ceci (sur une copie du classeur après avoir mis
les deux feuilles dedans) :
Sub RecupValeurs()
Dim PlageA As Range
Dim PlageB As Range
Dim CelA As Range
Dim CelB As Range
Dim Valeur As Variant
Dim ValeurCherchee As Variant
'les 2 feuilles sont dans le même classeur !
'les feuilles se nomment A et B, à adapté...!
'défini la grandeur de la plage sur la colonne A
'pour les 2 feuilles
With Worksheets("A")
Set PlageA = .Range(.[A1], .[A65536].End(xlUp))
End With
With Worksheets("B")
Set PlageB = .Range(.[A1], .[A65536].End(xlUp))
End With
'parcour la colonne A de la feuille B
For Each CelB In PlageB
'concatène les trois valeurs situées en colonne A, B et C
'de la feuille B pour simplifier la recherche
ValeurCherchee = CelB & CelB.Offset(0, 1) & CelB.Offset(0, 2)
'puisqu'il y a possibilité de plusieurs lignes correspondant
'au critère, il faut mouliner sur la feuille A, le parcourt ligne
'par ligne se fait sur la colonne A
For Each CelA In PlageA
'concatène les trois valeurs situées en colonne D, E et F
'de la feuille A pour comparaison aux colonnes A, B et C de
'la feuille B, à adapté...!
Valeur = CelA.Offset(0, 3) & _
CelA.Offset(0, 4) & _
CelA.Offset(0, 5)
'si la valeur est trouvée
If ValeurCherchee = Valeur Then
With PlageA
'colle le contenu de la cellule D
'de la feuille B dans la colonne G
'de la feuille A, de même pour les autres, à adapté...!
'D dans G
.Offset(0, 6) = Cel.Offset(0, 3)
'E dans H
.Offset(0, 7) = Cel.Offset(0, 4)
'F dans I
.Offset(0, 8) = Cel.Offset(0, 5)
End With
End If
Next CelA
Next Cel
Set CelA = Nothing
Set CelB = Nothing
Set PlageA = Nothing
Set PlageB = Nothing
End Sub
Hervé.
Le 27/05/2010 16:43, Driss HANIB a écrit :
Bonjour à tous
Connaissant VB6 mais très peu VBA Excel, je me permets de vous solliciter
pour m'aider à faire une tache répétitive.
Soit deux feuilles de données A et B dans deux classeurs différents (mais à
la limite je peux les mettre dasn le même classeur)
Mon problème est que je doit fusionner deux feuilles en une seule de la
façon suivante.
Soit une feuille A qui contient mes données principales et une feuille B qui
contient les données à ajouter.
ma feuille B contient N lignes (env 1500).
je veux parcourir ces lignes et pour chaque ligne je dois prendre le contenu
de 3 cellules situées donc dans trois colonnes différentes que je mets dans
3 variables.
lorsque j'ai ces 3 variables je dois parcourir l'autre feuille (A) pour voir
s' il y a une ligne donc 3 cellules (indice de colonne connu) qui contient
les mêmes valeurs. Si oui alors je reviens dans la feuille d'origine
(feuille B) et je dois copier le contenu de trois autres cellules (colonnes
connues) de cette même ligne dans trois cellules de la feuille A (colonnes
connues).
Il est possible que dans le feuille A il y ait plusieurs lignes qui soient
valables. il faut donc pouvoir parcourir la aussi tout le tableau de A avant
de changer de ligne dans B.
j'aurai voulu donc savoir dans un premier temps comment parcourir un tableau
de la ligne 1 à la ligne N non vide ?
Et ensuite comment récupérer la valeur d'une cellule pour la mettre dans une
variable ?
A adapter et à tester ceci (sur une copie du classeur après avoir mis les deux feuilles dedans) :
Sub RecupValeurs()
Dim PlageA As Range Dim PlageB As Range Dim CelA As Range Dim CelB As Range Dim Valeur As Variant Dim ValeurCherchee As Variant
'les 2 feuilles sont dans le même classeur ! 'les feuilles se nomment A et B, à adapté...!
'défini la grandeur de la plage sur la colonne A 'pour les 2 feuilles With Worksheets("A") Set PlageA = .Range(.[A1], .[A65536].End(xlUp)) End With
With Worksheets("B") Set PlageB = .Range(.[A1], .[A65536].End(xlUp)) End With
'parcour la colonne A de la feuille B For Each CelB In PlageB
'concatène les trois valeurs situées en colonne A, B et C 'de la feuille B pour simplifier la recherche ValeurCherchee = CelB & CelB.Offset(0, 1) & CelB.Offset(0, 2)
'puisqu'il y a possibilité de plusieurs lignes correspondant 'au critère, il faut mouliner sur la feuille A, le parcourt ligne 'par ligne se fait sur la colonne A For Each CelA In PlageA
'concatène les trois valeurs situées en colonne D, E et F 'de la feuille A pour comparaison aux colonnes A, B et C de 'la feuille B, à adapté...! Valeur = CelA.Offset(0, 3) & _ CelA.Offset(0, 4) & _ CelA.Offset(0, 5)
'si la valeur est trouvée If ValeurCherchee = Valeur Then
With PlageA 'colle le contenu de la cellule D 'de la feuille B dans la colonne G 'de la feuille A, de même pour les autres, à adapté...! 'D dans G .Offset(0, 6) = Cel.Offset(0, 3) 'E dans H .Offset(0, 7) = Cel.Offset(0, 4) 'F dans I .Offset(0, 8) = Cel.Offset(0, 5) End With
End If
Next CelA
Next Cel
Set CelA = Nothing Set CelB = Nothing Set PlageA = Nothing Set PlageB = Nothing
End Sub
Hervé.
Le 27/05/2010 16:43, Driss HANIB a écrit :
Bonjour à tous
Connaissant VB6 mais très peu VBA Excel, je me permets de vous solliciter pour m'aider à faire une tache répétitive.
Soit deux feuilles de données A et B dans deux classeurs différents (mais à la limite je peux les mettre dasn le même classeur)
Mon problème est que je doit fusionner deux feuilles en une seule de la façon suivante.
Soit une feuille A qui contient mes données principales et une feuille B qui contient les données à ajouter.
ma feuille B contient N lignes (env 1500). je veux parcourir ces lignes et pour chaque ligne je dois prendre le contenu de 3 cellules situées donc dans trois colonnes différentes que je mets dans 3 variables. lorsque j'ai ces 3 variables je dois parcourir l'autre feuille (A) pour voir s' il y a une ligne donc 3 cellules (indice de colonne connu) qui contient les mêmes valeurs. Si oui alors je reviens dans la feuille d'origine (feuille B) et je dois copier le contenu de trois autres cellules (colonnes connues) de cette même ligne dans trois cellules de la feuille A (colonnes connues). Il est possible que dans le feuille A il y ait plusieurs lignes qui soient valables. il faut donc pouvoir parcourir la aussi tout le tableau de A avant de changer de ligne dans B.
j'aurai voulu donc savoir dans un premier temps comment parcourir un tableau de la ligne 1 à la ligne N non vide ? Et ensuite comment récupérer la valeur d'une cellule pour la mettre dans une variable ?
merci pour vos pistes
Driss
Driss HANIB
merci à Fraction et à Hervé
j'ai pu résoudre mion problème
Driss "Driss HANIB" a écrit dans le message de news: efSLUra$
Bonjour à tous
Connaissant VB6 mais très peu VBA Excel, je me permets de vous solliciter pour m'aider à faire une tache répétitive.
Soit deux feuilles de données A et B dans deux classeurs différents (mais à la limite je peux les mettre dasn le même classeur)
Mon problème est que je doit fusionner deux feuilles en une seule de la façon suivante.
Soit une feuille A qui contient mes données principales et une feuille B qui contient les données à ajouter.
ma feuille B contient N lignes (env 1500). je veux parcourir ces lignes et pour chaque ligne je dois prendre le contenu de 3 cellules situées donc dans trois colonnes différentes que je mets dans 3 variables. lorsque j'ai ces 3 variables je dois parcourir l'autre feuille (A) pour voir s' il y a une ligne donc 3 cellules (indice de colonne connu) qui contient les mêmes valeurs. Si oui alors je reviens dans la feuille d'origine (feuille B) et je dois copier le contenu de trois autres cellules (colonnes connues) de cette même ligne dans trois cellules de la feuille A (colonnes connues). Il est possible que dans le feuille A il y ait plusieurs lignes qui soient valables. il faut donc pouvoir parcourir la aussi tout le tableau de A avant de changer de ligne dans B.
j'aurai voulu donc savoir dans un premier temps comment parcourir un tableau de la ligne 1 à la ligne N non vide ? Et ensuite comment récupérer la valeur d'une cellule pour la mettre dans une variable ?
merci pour vos pistes
Driss
merci à Fraction et à Hervé
j'ai pu résoudre mion problème
Driss
"Driss HANIB" <dhanib@club-internet.fr> a écrit dans le message de news:
efSLUra$KHA.4652@TK2MSFTNGP06.phx.gbl...
Bonjour à tous
Connaissant VB6 mais très peu VBA Excel, je me permets de vous solliciter
pour m'aider à faire une tache répétitive.
Soit deux feuilles de données A et B dans deux classeurs différents (mais
à la limite je peux les mettre dasn le même classeur)
Mon problème est que je doit fusionner deux feuilles en une seule de la
façon suivante.
Soit une feuille A qui contient mes données principales et une feuille B
qui contient les données à ajouter.
ma feuille B contient N lignes (env 1500).
je veux parcourir ces lignes et pour chaque ligne je dois prendre le
contenu de 3 cellules situées donc dans trois colonnes différentes que je
mets dans 3 variables.
lorsque j'ai ces 3 variables je dois parcourir l'autre feuille (A) pour
voir s' il y a une ligne donc 3 cellules (indice de colonne connu) qui
contient les mêmes valeurs. Si oui alors je reviens dans la feuille
d'origine (feuille B) et je dois copier le contenu de trois autres
cellules (colonnes connues) de cette même ligne dans trois cellules de la
feuille A (colonnes connues).
Il est possible que dans le feuille A il y ait plusieurs lignes qui soient
valables. il faut donc pouvoir parcourir la aussi tout le tableau de A
avant de changer de ligne dans B.
j'aurai voulu donc savoir dans un premier temps comment parcourir un
tableau de la ligne 1 à la ligne N non vide ?
Et ensuite comment récupérer la valeur d'une cellule pour la mettre dans
une variable ?
Driss "Driss HANIB" a écrit dans le message de news: efSLUra$
Bonjour à tous
Connaissant VB6 mais très peu VBA Excel, je me permets de vous solliciter pour m'aider à faire une tache répétitive.
Soit deux feuilles de données A et B dans deux classeurs différents (mais à la limite je peux les mettre dasn le même classeur)
Mon problème est que je doit fusionner deux feuilles en une seule de la façon suivante.
Soit une feuille A qui contient mes données principales et une feuille B qui contient les données à ajouter.
ma feuille B contient N lignes (env 1500). je veux parcourir ces lignes et pour chaque ligne je dois prendre le contenu de 3 cellules situées donc dans trois colonnes différentes que je mets dans 3 variables. lorsque j'ai ces 3 variables je dois parcourir l'autre feuille (A) pour voir s' il y a une ligne donc 3 cellules (indice de colonne connu) qui contient les mêmes valeurs. Si oui alors je reviens dans la feuille d'origine (feuille B) et je dois copier le contenu de trois autres cellules (colonnes connues) de cette même ligne dans trois cellules de la feuille A (colonnes connues). Il est possible que dans le feuille A il y ait plusieurs lignes qui soient valables. il faut donc pouvoir parcourir la aussi tout le tableau de A avant de changer de ligne dans B.
j'aurai voulu donc savoir dans un premier temps comment parcourir un tableau de la ligne 1 à la ligne N non vide ? Et ensuite comment récupérer la valeur d'une cellule pour la mettre dans une variable ?