Macro recuperation de données sur deux Excel
Elhevan a écrit :Parce que je suis débile, mais je me soigne
J'ai testé chez moi en changeant la cellule A1, mais toi tu fais A2 en fonction de A1 donc si j'fais pas un petit moins un ça marche moins bien Dim size As Integer Dim taille As Integer Dim ref As Integer Dim nom As String nom = Workbooks(FicheB).Worksheets(Feuil1).Cells(i-1, j).Value count = InStrRev(nom, "_") taille = Len(nom) ref = Right(nom, taille - count) ref = ref + 1 Workbooks(FicheB).Worksheets(Feuil1).Cells(i, j).Value = Left(nom, count) & ref
Pour la reference sur le fichier déja existant c'est S_2016_38 ( le 38 c'est le chiffre actuel de la ref )
Mais ducoup le 2016 va changer en début de l'année pro, je serais obligé de re rentrer dans le code pour incrementer l'année
Il y a pas moyen de faire incrémenter par rapport à la cellule d'avant?
A l'heure actuelle ça prend S_2016_38, ça isole ce qui est après le dernier _ donc 38, ça rajoute un donc 39 et ça colle ça à ce qui est avant le dernier _ donc S_2016_. L'année prochaine tu devras remplir la première ref à la main et le reste ira tout seul.
Ah non je ne te permet pas de te traiter de débile car sinon moi je serais quoi ?
Sinon, ca ne marche pas c'est peut etre lier au count?
j'ai fais un screen du code et l'erreur
Dim i As Integer
i = 2
ThisWorkbook.Activate
Do Until IsEmpty(Worksheets(SEG_2016).Cells(i, 1)) 'va chercher la ligne vide
i = i + 1
Loop
Dim j As Integer
Dim size As Integer
Dim ref As Integer
Dim nom As String
j = 1
nom = Workbooks(FicheB).Worksheets(Feuil1).Cells(i - 1, j).Value
count = InStrRev(nom, "_")
taille = Len(nom)
ref = Right(nom, taille - count)
ref = ref + 1
Workbooks(FicheB).Worksheets(Feuil1).Cells(i, j).Value = Left(nom, count) & ref
j = j + 1
If IsEmpty(Workbooks(FicheA).Worksheets(SEG_2016).Cells(8, 3)) Then
En effet, c'est censé être un size, ça marche chez moi parce que j'ai pas demandé à Excel de m'engueuler si je déclare pas mes variables, mais c'pas bien
Donc remplace count par size (à trois endroits si j'suis pas aveugle en plus d'être étourdie), on l'a déclaré, on l'utilise !
Edit : je vois que tu as changé le nom de la feuille, pense-y ici aussi.
Elhevan a écrit :En effet, c'est censé être un size, ça marche chez moi parce que j'ai pas demandé à Excel de m'engueuler si je déclare pas mes variables, mais c'pas bien
Donc remplace count par size (à trois endroits si j'suis pas aveugle en plus d'être étourdie), on l'a déclaré, on l'utilise !
Edit : je vois que tu as changé le nom de la feuille, pense-y ici aussi.
il aime pas le size non plus :'(
As-tu changé le nom de la feuille comme tu l'as fait avec le reste du code ?
(au passage je crois que tu as viré le dim taille
tu avais déja déclarer taille au début du fichier donc je l'ai supprimé du nouveau code
et j'ai mis size aulieu de count
la même erreur pour size et taille aussi je pense
aaaah oui la je suis vraiment DEBILE ! je viens de changer le nom de la feuille
pour le dim taille c'est bon c'est la même chose que pour le fichier A ou je dois déclarer une nouvelle variable?
On peut le réutiliser, c'est bon, j'avais juste oublié qu'on s'en était servi (et là ça va planter et détruire le monde juste pour me donner tort
Du coup ça marche ?
Elhevan a écrit :On peut le réutiliser, c'est bon, j'avais juste oublié qu'on s'en était servi (et là ça va planter et détruire le monde juste pour me donner tort
). Du coup ça marche ?
hahaha je fais genre j'ai participer !
oui ca l'air de marcher j'ai rajouter des conditions dans le code la je cherche s'il y a quelque chose que j'ai oublié
en tout cas je te remercie énormément!
si j'ai besoin d'autres chose dans les deux jours qui viennent je n'hésiterai pas à revenir vers toi !
Elhevan a écrit :On peut le réutiliser, c'est bon, j'avais juste oublié qu'on s'en était servi (et là ça va planter et détruire le monde juste pour me donner tort
). Du coup ça marche ?
une petite question :
J'essaie de faire une condition pour la recuperation d'une valeur
si la case (8,3) est vide je recupere la valeur A
sinon
si
If IsEmpty(Workbooks(FicheA).Worksheets(SEG_2016).Cells(8, 3)) Then
Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "A"
Else
If Workbooks(FicheA).Worksheets(SEG_2016).Cells(17, 3) = "YES" Then
Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "A&B"
End If
Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "B"
End If
Mais quand la case est à YES j'ai comme résultat que B
Je pense qu'il faut l'écrire autrement le code
Observe bien la différence entre les deux lignes ! C'est subtil, mais important
Workbooks(FicheA).Worksheets(SEG_2016).Cells(17, 3) = "YES"
Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "A&B"
Elhevan a écrit :
Observe bien la différence entre les deux lignes ! C'est subtil, mais important
J'ai corrigé mais ca resous pas le soucis
If IsEmpty(Workbooks(FicheA).Worksheets(SEG_2016).Cells(8, 3)) Then
Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "A"
Else
If Workbooks(FicheA).Worksheets(SEG_2016).Cells(i, j) = "YES" Then
Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "A&B"
Else
Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "B"
End If
End If
C'était du value dont je parlais ^^'
If IsEmpty(Workbooks(FicheA).Worksheets(SEG_2016).Cells(8, 3)) Then
Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "A"
Else
If Workbooks(FicheA).Worksheets(SEG_2016).Cells(17, 3).Value = "YES" Then
Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "A&B"
End If
Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "B"
End If
Elhevan a écrit :C'était du value dont je parlais ^^'
If IsEmpty(Workbooks(FicheA).Worksheets(SEG_2016).Cells(8, 3)) Then Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "A" Else If Workbooks(FicheA).Worksheets(SEG_2016).Cells(17, 3).Value = "YES" Then Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "A&B" End If Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "B" End If
en effet !
super merciii !
Bonjour D3dex et Elhevan ainsi que tout les autres genies d'excel
Je suis de retour,
depuis cet après midi je me casse la tête avec une concatenation avec suppression d'espace vide
j'ai reussi à faire la concatenation mais quand les cellules sont vides ca les copie quand même :'(
j = j + 1 ' nom C
Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value = Workbooks(FicheA).Worksheets(S2016).Cells(20, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(25, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(30, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(35, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(40, 3).Value
Est ce que vous avez une idée de comment copier les cellules non vide seulement avec la concatenation
Merciii
Elhevan a écrit :C'était du value dont je parlais ^^'
If IsEmpty(Workbooks(FicheA).Worksheets(SEG_2016).Cells(8, 3)) Then Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "A" Else If Workbooks(FicheA).Worksheets(SEG_2016).Cells(17, 3).Value = "YES" Then Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "A&B" End If Workbooks(FicheB).Worksheets(SEG_2016).Cells(i, j).Value = "B" End If
pas de réponse à ma question ci dessus?
quelqu'un pour m'aider en l'absence de mes deux sauveurs?
Merci!
Bonjour
-missya a écrit :j = j + 1 ' nom C Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value = Workbooks(FicheA).Worksheets(S2016).Cells(20, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(25, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(30, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(35, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(40, 3).Value
j = j + 1 ' nom C
If IsEmpty(Cells(i,j)) Then
Else Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value = Workbooks(FicheA).Worksheets(S2016).Cells(20, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(25, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(30, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(35, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(40, 3).Value
End if
S'il y a plusieurs cellules If IsEmpty(Cells(i,j)) Ans IsEmpty(l'autre)
Elhevan a écrit :Bonjour
-missya a écrit :j = j + 1 ' nom C Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value = Workbooks(FicheA).Worksheets(S2016).Cells(20, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(25, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(30, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(35, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(40, 3).Value
j = j + 1 ' nom C If IsEmpty(Cells(i,j)) Then Else Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value = Workbooks(FicheA).Worksheets(S2016).Cells(20, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(25, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(30, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(35, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(40, 3).Value End if
S'il y a plusieurs cellules If IsEmpty(Cells(i,j)) Ans IsEmpty(l'autre)
Aaaah tu es de retour! merci !
par contre je n'ai pas compris la fin
ca ne marche pas sinon
Tu veux concaténer si quelles cases ne sont pas vides ?
Elhevan a écrit :Tu veux concaténer si quelles cases ne sont pas vides ?
je veux concatener que les cases pas vide des 4 cases du code avec un retour chariot ( chr(10 )
Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value = Workbooks(FicheA).Worksheets(S2016).Cells(20, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(25, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(30, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(35, 3).Value & Chr(10) & Workbooks(FicheA).Worksheets(S2016).Cells(40, 3).Value
If not IsEmpty(Workbooks(FicheA).Worksheets(S2016).Cells(20, 3))
Then Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value = Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value & Workbooks(FicheA).Worksheets(S2016).Cells(20, 3).Value & Chr(10)
End if
If not IsEmpty(Workbooks(FicheA).Worksheets(S2016).Cells(25, 3).Value)
Then Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value = Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value & Workbooks(FicheA).Worksheets(S2016).Cells(25, 3).Value & Chr(10)
End if
If not IsEmpty(Workbooks(FicheA).Worksheets(S2016).Cells(30, 3).Value)
Then Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value = Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value & Workbooks(FicheA).Worksheets(S2016).Cells(30, 3).Value & Chr(10)
End If
If not IsEmpty(Workbooks(FicheA).Worksheets(S2016).Cells(35, 3).Value)
Then Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value = Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value & Workbooks(FicheA).Worksheets(S2016).Cells(35, 3).Value & Chr(10)
End If
If not IsEmpty(Workbooks(FicheA).Worksheets(S2016).Cells(40, 3).Value)
Then Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value = Workbooks(FicheB).Worksheets(S2016).Cells(i, j).Value & Workbooks(FicheA).Worksheets(S2016).Cells(40, 3).Value
End If